Система компьютерной алгебры Maple

Пакет Maple – интерактивная программа, позволяющая проводить аналитические выкладки и вычисления, снабженная средствами двумерной и трехмерной графики, имеющая мощный язык программирования и богатую библиотеку математических формул и сведений. Работа с Maple заключается в том, что пользователь вводит математические выражения и инструкции (команды), а система пытается их выполнить и представить ответ. Получив (или не получив) ответ, пользователь вводит новые инструкции и так далее – взаимодействие с пакетом происходит в диалоговом режиме. Благодаря собственному языку программирования высокого уровня, введенные выражения и инструкции, а также результаты выполнения команд – формулы, графики, таблицы и числа – запоминаются в едином документе, и итоговый документ становится (быть может, с минимальными дополнениями) научной статьей, разделом в учебнике, отчетом.

Графический интерфейс Maple аналогичен имеющемуся в системах редактирования и подготовки текста и использует обычные средства работы с файлами и редактирования (мышь и клавиатура). После запуска выполняемого модуля wmaple или xmaple в среде Unix появляется оболочка с новым документом (worksheet)

Работа в Maple проходит в режиме сессии (session) – пользователь вводит команды, математические выражения, процедуры, которые воспринимаются и интерпретируются Maple. Каждая команда должна завершаться точкой с запятой (;) или двоеточием (:). В первом случае в строке под предложением будет выведен результат исполнения команды или сообщение об ошибке, во втором случае результат не выводится. Для отмены всех сделанных назначений и начала нового сеанса без выхода из Maple используется команда restart.

Кроме того, в Maple можно вводить таблицы и текстовые параграфы, структурировать текст и документ, добавлять гиперссылки, объединяющие несколько документов в подобие электронной книги. В документ также можно вставлять объекты (рисунки и таблицы) из других программ, используя интерфейс OLE2.

Отметим, что различные документы, открытые в одном сеансе, используют общую область памяти, и значение, присвоенное переменной в одном документе, сохраняется при переходе к другому документу.

Результаты работы могут быть сохранены в файлах различных форматов. Текущий документ (области ввода и вывода, комментарии, текст, графика) записываются в файл с расширением .mws. При записи в файлы с другими расширениями сохраняются только области ввода и тексты комментариев. Кроме того, весь документ или его часть могут быть сохранены в форматах, допускающих их использование в других программах.

Пакет Maple постоянно развивается, приобретая новые команды и, соответственно, возможности для проведения математических выкладок, вычислений, графического отображения информации. При этом происходят изменения в синтаксисе и оболочке. Для сохранения преемственности с документами, подготовленными в старых версиях, фирма снабжает свой продукт специальными конверторами, при загрузке файла устаревшей версии Maple предлагает преобразовать нотацию файла согласно новым правилам.

Набор и исполнение команд производится по группам (Execution Group). Каждая группа состоит из нескольких частей: область ввода (Input Region) с командами, область вывода (Output Region) с результатами выполнения и тексты комментариев (Text Region). Область вывода может включать результаты выполнения математических и алгоритмических операций, а также графические образы (двумерная и трехмерная графика). Группы выделяются слева квадратными скобками и разделяются сепараторами (Separator), которые по умолчанию невидимы, но могут быть сделаны видимыми. Для структурирования документа используются параграфы.

Системы аналитических вычислений оперируют с множеством объектов, используя для работы различные типы данных. Это позволяет применять свои правила обработки для каждого типа. Простейшими объектами в Maple являются числа, константы, строки и имена. Под числами будем понимать собственно целые и вещественные числа, а также рациональные дроби и радикалы (корни из чисел). Приведём примеры чисел:

> 1.23, 4e5, I+Pi, sqrt(8);

Использование рациональных чисел, радикалов и констант (число p, мнимая единица) позволяет проводить абсолютно точные вычисления, так как при выполнении операций не возникает погрешности округления. Сразу отметим, что эти операции производятся гораздо медленнее.

Синтаксис и выражения

Каждая введенная команда должна завершаться разделителем: точкой с запятой (;) или двоеточием (:). Если ввод предложения завершается точкой с запятой, то в строке под предложением сразу будет отклик: результат исполнения команды или сообщение об ошибке. Разделитель (:) используется для отмены вывода, когда команда выполняется системой, но ее результат не выводится на экран. В Maple применяются круглые, квадратные и фигурные скобки. Назначение круглых скобок – задавать порядок при построении математических выражений и обрамлять аргументы функций и параметры в записи команд. Квадратные скобки нужны для работы с индексными величинами. Фигурные скобки используются для формирования множеств. В Maple две последовательные точки в параметрах команд применяются для определения интервала изменения переменных.

Теперь расскажем о других важных символах, используемых в Maple. Знаком процента (%) обозначается предшествующий вывод. Два знака процента отсылают к предпоследнему результату. Наконец, предшественник предпоследнего результата обозначается тремя знаками процента. Эта нотация может быть удобна при последовательной работе с документом, но чревата неприятностями при свободном перемещении по тексту, когда команды выполняются в произвольном порядке.

Используя константы, переменные, знаки арифметических и других операций, составляются выражения. Это основной объект для многих команд. Последовательность выполнения арифметических операций соответствует стандартным математическим правилам: сначала проводится возведение в степень (^), затем умножение (*) и деление (/), а в конце – сложение (+) и вычитание (-). Операции выполняются слева направо, для изменения порядка используются круглые скобки. Для операций отношения имеются знаки >, <, >=, <=, <>, =, а для конструирования булевых выражений используются также команды not, or, and. Обратный слеш (\) используется для переносов, а для комментирования в Maple предусмотрен символ #. Вся строка после этого символа не выполняется. Приведем примеры выражений:

> x+y^z-12<0;

  3.14159\26535\89793\23846; #число пи

Константы

В Maple представлены все математические константы. В табл. 1.2 представлены важнейшие из них. Напомним, что число p даётся при помощи Pi, а pi означает греческую букву p.

Таблица 1.2. Математические константы.

Имя

Описание

Pi

Число p

E

Основание натурального логарифма (число e)

I

Мнимая единица (квадратный корень из –1)

Infinity

Бесконечность

gamma

Константа Эйлера

true, false

Булевы константы (истина, ложь)

Имена этих констант являются зарезервированными, а их значения не могут быть переопределены в отличие от ряда переменных среды (управляющих констант).

Переменные

Переменная Maple идентифицируется именем – набором символов, начинающимся с буквы, причем большие и малые буквы различаются. Кроме букв могут употребляться цифры и знак подчеркивания. Приведем примеры различных имен: Old, old, o_1d

Длина имени зависит от платформы, и на 32-битных машинах допустимы имена из пятисот тысяч символов, а для 64-битных машин можно составлять имена длиной более миллиарда знаков (см. справку). Составные имена могут быть сформированы при помощи оператора конкатенации (||) или команды cat. В качестве имен переменных запрещено использовать термины языка Maple: and, break, by, catch, description, do, done, elif, else, end, error, export, fi, finally, for, from, global, if, in, intersect, local, minus, mod, module, next, not, od, option, options, or, proc, quit, read, return, save, stop, then, to, try, union, use, while. Кроме того, не рекомендуется использовать имена всех команд Maple в качестве имен.

Для обозначения служебных констант используются имена, начинающиеся с подчеркивания. Неопределенные константы, возникающие при решении дифференциального уравнения, именуются _С1, _С2 и т. д. Произвольное целое число обозначается как _N1, _N2, и т.д., а комплексная величина соответственно как _Z1, _Z2 и т.д. Если последним символом имени идет тильда (~), то это имя переменной, относительно которой сделаны назначения (определена вещественность или положительность и т. д., см. подробнее команду assume).

Для присвоения значений переменной используется знак :=. Для просмотра содержимого переменной простого типа нужно лишь ввести имя переменной (для массивов и других составных типов используется команда eval). Напомним, что команда restart используется для отмены всех сделанных назначений в сеансе. Чтобы освободить конкретную переменную от предшествующих назначений, нужно этой переменной присвоить ее имя, заключенное в прямые одинарные кавычки (') (апострофы). Например:

> ex:=x^2+exp(y): ex;

> ex:='ex': ex;

Для защиты от изменений существует команда protect, а для снятия защиты – unprotect. В частности, защищенными являются многие константы Maple. Приведем пример использования последних двух команд. Сначала переменной присвоим значение, а затем ее защитим:

> a:=2: protect('a'): a;

Теперь попытаемся присвоить ей иное значение. Результатом будет сообщение об ошибке:

> a:=3;

Error, attempting to assign to `a` which is protected

Следующей командой снимем защиту с переменной, а затем присвоим ей новое

значение:

> unprotect('a'): a:=3: a;

Переменные среды

Важными переменными среды являются Digits и Order, определяющие соответственно число знаков мантиссы для операций с плавающей точкой (по умолчанию десять цифр) и порядка разложений (по умолчанию разложения выписываются члены до шестого порядка). Для переопределения любой из этих величин достаточно просто присвоить ей новое значение. Приведем примеры, иллюстрирующие потерю точности при вычислениях с недостаточным числом значащих цифр и вычисление экспоненты:

> Digits:=1: sqrt(2.0)+0.01-71/50;

> Digits:=4: sqrt(2.0)+0.01-71/50;

> Digits:=20: exp(1.0);

Операции с вещественными числами проводятся по умолчанию с десятью значащими цифрами, но, переопределив Digits, можно работать с любой мантиссой. Этот способ может оказаться полезным и для определенных этапов символьных вычислений, поскольку операции с рациональными числами выполняются медленнее. Имеется также ряд других переменных среды. Так, переменная среды UseHardwareFloats определяет использование арифметического процессора компьютера для операций с вещественными числами, на котором вы работаете. Если эта переменная имеет значение true, то используется непосредственно процессор, а в случае false арифметические операции проделываются Maple программно. По умолчанию этой переменной присвоено значение true. В настоящее время этот режим действует для команд пакета LinearAlgebra и обслуживает операции с массивами, матрицами и векторами, которые основаны на новом классе rtable. Co временем, по утверждению разработчиков, переменная UseHardwarefloats будет определять режим вычислений для всех операций арифметики с плавающей точкой. Перечень переменных среды может быть выведен по команде

Ø       anames(environment);

Строки и символы

Строкой (string) является любой набор символов, заключенный в двойные кавычки. Например:

> "Maple string:"";'o ?../'(}[]'-!G#tt*4*()_+";

Символ воспринимается Maple как единое целое, а строка состоит из символов, и с каждым из них можно работать отдельно. Например:

> v1:="String"; v2:=`Symbol`;

   > v1[2]; v2[2];

Предупредим об опасности произвольного назначения имен переменных. Если имя переменной совпадает с именем какой-нибудь команды, то такая команда становится недоступной в текущем сеансе. Например:

> dchange:=2;

> with(PDEtiils.dchange):

Error, with expects its 1st argument, package, to be of type {table, procedure, module, name}, but received 2*PDEtiils

Поэтому перед введением новой переменной name полезно удостовериться, что имя не занято, командой ?name. Появление окошка справки будет означать существование команды с именем name. При работе с Maple следует анализировать результат выполнения команды. Будучи гибкой системой, Maple старается выполнить любую введенную команду. Синтаксические ошибки выделяются программой и достаточно заметны. Описки не так бросаются в глаза. Если неправильно введено имя команды или не загружена библиотека, то Maple просто повторяет набранное в строке ввода без выполнения. Вообще, нужно постоянно проверять введенное и результат, иначе могут возникать «непонятные» ошибки. Например, если в строке ввода опустить знак умножения перед круглой скобкой в выражении x*(y-z), то Maple посчитает, что y-z является аргументом некоторой функции x(y-z). Сказанное иллюстрирует пример дифференцирования двух этих функций по переменной у:

> diff(x*(y-z),y);

> diff(x(y-z),y);

Другая часто встречающаяся ошибка связана с тем, что Maple различает большие и маленькие буквы. Например, если имя числа p написать с маленькой буквы, то пользователь не заметит видимых изменений при представлении результата команд, но многие команды будут работать неверно. Пример:

> sin(pi);

> sin(Pi);

Как уже отмечалось выше, прямые одинарные кавычки (апострофы) используются для того, чтобы освободить переменную от предшествующих значений. Кроме того, прямые кавычки полезны для предупреждения ошибки в том случае, когда для выполнения команды используется переменная, получившая значение ранее. Выполним последовательно команду присваивания и команду вычисления суммы, использовав в качестве индекса определённую ранее переменную:

> i:=3;

> sum(i^2,i=1..6);

Error, (in sum) summation variable previously assigned, second argument evaluates to 3 = 1 .. 6

В результате появилось сообщение об ошибке, поскольку второй аргумент в команде суммирования sum воспринят как 3=1..6. Применение кавычек даст правильный результат:

> sum('i'^2,'i'=1..6);

Типы переменных

В Maple существует множество типов переменных: от известных вещественного (float), целого (integer) и строкового (string) до тех, которые необходимы для выполнения и программирования аналитических преобразований: дробь (fraction), функция (function), индексная переменная (indexed), процедура (procedure), множество (set), разложение (series), последовательность выражений (exprseq), массив (array), списки (переменные типа list, listlist, listlistlist) и некоторые другие. Списки используются для хранения коэффициентов полиномов, множества удобны при формировании системы уравнений и решений уравнений, масси­вы позволяют хранить и использовать упорядоченную информацию и т. д.

По умолчанию переменная считается скалярной и имеет тип string. Это фактически математическая переменная, как x в формуле f(x). Для задания переменных других типов требуется явное их определение: при помощи оператора присваивания или команд, преобразующих тип. Информацию о типе той или иной переменной можно получить при помощи команды whattype, а проверить принадлежность переменной VAR типу ТYРE помогает команда type (VAR,TYPE); Рассмотрим базовые типы: последовательности выражений, списки, множества, массивы и таблицы. Попутно представим ряд команд для работы с данными этих типов.

Переменная типа exprseq получается как последовательность выражений Maple, разделённых запятыми. Например:

> ex:=2,3,x^2,'abc',2;

Последовательность выражений в квадратных скобках образует переменную типа list (список):

> ex:=2,3,x^2,'abc',2: lex=[ex];

Тот же список получится по команде list(ex). Обращение к элементам типа list аналогично для последовательностей exprseq: в квадратных скобках указывается номер или диапазон номеров

Заключив последовательность выражений в фигурные скобки, получим перемен­ную типа set (множество). Именно в виде множеств удобно задавать системы уравнений и получать найденные Maple решения уравнений:

> ex:=2,3,x^2,'abc',2: s:={ex};

Массивы или объекты типа array позволяют организовывать данные, используя для индексации отрицательные числа и нуль. Массив создается по команде array(FUN,DIA,LST). Параметры ее имеют следующее назначение: функция FUN задает свойства мас­сива, переменная DIA определяет диапазоны изменения индексов, a LST есть список элементов массива. Каждый из параметров может быть опущен, но по крайней мере один диапазон или список элементов должны быть заданы. В качестве имени FUN могут быть использованы следующие стандартные методы: symmetric, antisymmetric, sparse, diagonal, identity, package. Это позволяет определись соответственно массивы симметричные и антисимметричные (кососимметричные), разреженные (нули для неупомянутых элементов), массивы с ненулевой диаго­налью и единичные. Имя package указывает на процедуру, служащую для ввода элементов. Например, для создания массива из четырех элементов с именем А используется следующая конструкция:

> A:=array(-1..2);

Сама переменная А при этом считается строковой (string), а любой элемент массива — индексной переменной (indexed). С элементами можно работать, как с обычными переменными: присваивать им значения, использовать при организации выражений. Например:

> A[-1]:=qwerty: A[1]:='йцукен': A[0]:=0: A[1]:=A[0]-A[2]:

Чтобы посмотреть содержимое массива, используем команду print:

> print(A);

При помощи команды table можно организовать данные в виде таблицы, отказавшись от целочисленной нумерации: table(FUN,LST). Здесь функция FUN определяет свойства таблицы, а список элементов LST формируется в виде пар равенств: Индекс-Значение. Для задания свойства можно использовать методы, перечисленные ранее. Например, создадим таблицу, устанавливающую соответствие между цифрами в английском и итальянском языках:

> T:=table(sparse,[one=uno,two=due,three=tre]);

Комбинируя данные разных типов, можно получить, например, списки множеств или последовательности списков и т. д. К составным типам относятся indexable, sequential, tabular, rtable. Встроенными типами (built-in) являются And, Or, Not, nonnegint, posint, nonposint, negint, negative, positive, nonnegative, nonpositive. Большое число типов связано с необходимостью адекватно обрабатывать многообразие математических конструкций. Кроме того, в дополнение к имеющимся типам можно создавать свои, расширяя возможности Maple для решения возникающих задач. Для работы с данными и извлечения элементов полезны команды nops (число операндов) и ор (взятие операнда).

Опишем действие ряда команд, позволяющих эффективно обрабатывать данные (числа, выражения и другие), составляющие списки. Очень важной является команда map(FUN,LST). Эта команда применяет функцию FUN к каждому элементу объекта LST, в качестве которого может выступать список, множество или выражение. Вычисление косинуса для нескольких значений из списка демонстрирует следующий пример:

> map(cos,[0,Pi/2,Pi]);

Таблица 1. Стандартные функции.

Maple

Математическая запись

exp(x)

ex

ln(x) или log(x)

ln x

log10(x)

lg x

log[a](x)

loga x

sqrt(x)

Öx

abs(x)

|x|

signum(x)

sgn x

n!

n!

Таблица 2. Функции округления.

Имя

Назначение

round

Округление к ближайшему целому

trunc

Округление отбрасыванием дробной части

floor

Округление к меньшему целому

ceil

Округление к большему целому

Таблица 3. Математические функции.

Имена

Назначение

sin, cos, tan, cot, sec, csc

Тригонометрические функции (аргументы в радианах)

arcsin, arccos, arctan, arccot,

arcsec, arccsc

Обратные тригонометрические функции

sinh, cosh, tanh, coth, sech, csch

Гиперболические функции

arcsinh, arccosh, arctanh,

arccoth, arcsech, arccsch

Обратные гиперболические функции

Dirac

Дельта-функция Дирака

Heaviside

Функция Хевисайда

BesselJ(p,x), BesselY(p,x),

BesselI(p,x), BesselK(p,x),

Бесселевы функции

GAMMA(z), GAMMA(a,x),

Beta(x,y)

Гамма- и бета-функции

Zeta(z)

Дзета-функция Римана

erf(x)

Интеграл ошибок

LegendreF, LegendreE,

LegendrePi

Эллиптические интегралы в форме Лежандра первого, второго и третьего рода

LegendreFc, LegendreEc,

LegendrePic

Полные эллиптические интегралы в форме Лежандра первого, второго и третьего рода

round, trunc

Округление к усечённому целому

Построение графиков функций в Maple

Для построения графиков в декартовых координатах служит функция plot

> plot(cos(x),x=-3*Pi..3*Pi);

[Maple Plot]

Если функция принимает бесконечное значение в какой-либо точке, то следует указать дополнительный параметр discont=true. Кроме того, может потребоваться ограничить диапазон отображения графика по оси y.

> plot(tan(x),x=-Pi..Pi,y=-5..5,discont = true);

[Maple Plot]

Изменить параметры графика можно из контекстного меню, которое появляется, если нажать правую кнопку мыши в поле графика; из основного меню, пункты которого меняются, если график выделен; задавая необязательные параметры функции plot.

> plot(sin(x),x=-2*Pi..2*Pi,color=gold,title=`График sin(x)`,axes=boxed,titlefont=[TIMES,ITALIC,10]);

[Maple Plot]

На рисунке вверху изменен цвет (color=gold), тип координатных осей (axes=boxed) и добавлен заголовок курсивом стиля Times размера 10 пунктов (titlefont=[TIMES,ITALIC,10]).

Параметрически заданную функцию можно изобразить также с помощью plot

> plot([sin(2*t),cos(3*t),t=0..4*Pi]);

[Maple Plot]

Для того, чтобы получить график в полярных координатах, следует указать coords=polar

[> restart:r:=f^2/10:plot([r,f,f=0..5*Pi],coords=polar);

Для построения поверхностей служит функция plot3d. Она позволяет изображать поверхность, заданную как обычным способом, так и в параметрическом виде, а также несколько поверхностей одновременно.

> plot3d(x^2+y^2,x=-1..1,y=-1..1);

[Maple Plot]

> plot3d([
(1+0.3*cos(phi))*cos(theta),
(1+0.3*cos(phi))*sin(theta),
0.3*sin(phi)],
phi=0..2*Pi,
theta=0..2*Pi,
title=`
Тор
`,
titlefont=[TIMES,ITALIC,12],
scaling=CONSTRAINED);

[Maple Plot]

> plot3d({x^2+y^2,x^2-y^2},x=-1..1,y=-1..1,orientation=[70,70]);

[Maple Plot]

 

Задания:

1.      Построить графики функций {x=sin t, y=ln t, t=0..5}; {ρ=φ2/10, φ=0..5π}; y=2sinx

2.      Построить графики

Параметрические координаты

Функция

интервал

Функция

Интервал

t1

t2

t1

t2

1

0

2p

8

0

p /2

2

-p

p

9

-1.5

0.5

3

-3

3

10

-p /2

p /2

4

-p

2p

11

p /8

p /3

5

-2

3

12

-p

p

6

-10

20

13

0

2p

7

-0.1

2

14

-p

p

Полярные координаты

Функция

интервал

Функция

Интервал

j 1

j 2

j 1

j 2

1

0

p

8

-p /4

p /4

2

-p

p

9

-2

2

3

0

p /2

10

-p

p

4

-p

p

11

0

p /6

5

-p

p

12

-p

p

6

-p

p

13

-p

p

7

-p /2

p /2

14

-p

p

3.      Вычислить значение функции и построить график в точках x=1 и x=-1.46  

  1. Построить график функции , где  и  с шагом 0.1 в трехмерной системе координат.